1. Field of the Invention
The present invention relates to the field of distributed computing and in particular, to apparatus, systems, and methods to facilitate the deployment and management of distributed computing systems and applications.
2. Description of Related Art
The performance of computing applications may often be increased by distributing the computational workload across nodes in a cluster of computers. For example, the performance of compute intensive applications such as DNA sequencing, financial modeling, weather simulations, electronic design automation, etc. can be significantly improved by distributing the applications across nodes in computing clusters. Similarly, by distributing web applications over a computing cluster performance of the application may be enhanced by decreasing latency and/or increasing throughput. Most applications today, including the examples mentioned above, are designed and programmed to be distributed over a cluster of computers. Indeed, a vast majority of organizations such as corporations, academic departments, and research centers use computing clusters for both mission critical applications and for a variety of other functions that arise in the course of normal business operations. Because applications that utilize an organizations private cluster may be run infrequently, the utilization of such clusters may be less than ideal. In addition, there are significant costs associated with the provisioning and maintenance of large computing clusters. Moreover, for a given private cluster and application there is an upper threshold on the scalability of the application because increasing the capacity of the cluster may involve the physical addition of hardware and other resources to the cluster. The evolution of “Cloud computing services” or “public clouds”, which provide on-demand access to high performance computing capabilities over the Internet, is an attempt to increase efficiencies and scalability, while reducing the costs associated with large computing clusters.
“Cloud computing” can refer to the use of a company's own computer cluster, but more often the term refers to the use of publicly available computing resources over the Internet through Web browser-based or client-side applications. The cloud infrastructures are typically made available on an on-demand basis. Cloud computing enables organizations to run applications on reliable, highly-available, and scalable software and hardware infrastructures referred to as clouds. Clouds may use virtualization or sophisticated systems management solutions to provide a flexible, fault tolerant, and highly available view of underlying resources so that dedicated hardware resources can be dynamically shared across several users instead of being assigned individually. These computing resources, which are often made available as virtual machines (and in some instances as physical machines), may be accessed using Application Programming Interfaces (“APIs”) and self-service portals—such as websites accessed using a web browser. Cloud infrastructure, which is offered by companies such as Amazon™ EC2, Terremark™, Rackspace™, and Savvis™, refers to the provision of Infrastructure as a Service (IaaS) and permits fee-based on-demand access to the power of computing clusters and datacenters over the Internet. In some instances, organizations may use virtualization and convert their private data-centers into clouds as well. These are termed private clouds. As used herein, the term cloud can refer to both public and private clouds, which can be set-up as virtualized or physical compute clusters.
One drawback of current cloud computing systems is that they continue to present an infrastructure view of the resources so that end users manage cloud-dependent machines with varying storage, network, memory, and compute capabilities. For example, cloud providers may use very different APIs to present resources and the underlying capabilities of the cloud computing infrastructure to users. Consequently, complicated software systems may be even harder to manage on clouds than on private datacenters because (i) the infrastructure may be very different from a configuration under one's private control (ii) the cloud infrastructure varies with provider and, (iii) each cloud provider has very different APIs to access, provision, and scale resources. For example, shared storage may be provided in different ways on different clouds. Amazon™ for e.g.; has https based shared storage called Amazon™ S3, while on Rackspace™, one can utilize Network Attached Storage/System Area Network (“NAS/SAN”) hardware to get shared storage. These differences in hardware and distributed systems capabilities creep into the virtualization abstraction, so that porting and migrating existing applications to cloud infrastructures can involve significant re-coding, re-architecting, and revision of systems management, security and compliance features. Therefore, there is a need for apparatus, systems, and methods that facilitate the quick, seamless, and transparent porting and migration of existing applications to a variety of cloud infrastructures, including hybrid public/private infrastructures.